package com.gusheng.mybatisplug.handler;

import java.util.HashMap;
import java.util.Map;

/**
 *	拦截器调用状态<br>
 *	主要用途 : 在实现的IDataAuth中,注入Dao层的方法,调用被@DataAuth标注的方法,会造成拦截器死循环<br>
 *	因此每个拦截器在一次查询中只执行一次<br>
 * @author Administrator
 *
 */
public class CallStatus {
	
	// 用以保存一次查询中所有相关@DataAuth的状态
	private Map<String,Integer> callstatus = new HashMap<>();
	
	// 拦截器未被调用
	public final static Integer STATUS_NO_CALL = 0;
	
	// 拦截调用中
	public final static Integer STATUS_CALLING = 1;
	
	// 拦截器调用结束
	public final static Integer STATUS_CALL_END = 2;
	
	/**
	 * 	根据拦截器名称获取调用状态
	 * @param authName 拦截器名称
	 * @return
	 */
	public Integer getStatusByName( String authName ) {
		
		
		/**
		 *	如果没有缓存,则表示第一次调用
		 */
		if ( callstatus.containsKey( authName ) ) {
			
			return callstatus.get( authName );
			
		}else {
			
			// 设置为调用中
			callstatus.put( authName , STATUS_CALLING );
			
			// 返回未调用
			return STATUS_NO_CALL;
		}
	}
	
	/**
	 * 	更新拦截器状态
	 * @param authName 拦截器名称
	 * @param status 状态
	 */
	public void upStatus( String authName , Integer status ) {
		callstatus.put( authName , status );
	}
	
}
